Technical Field
The present disclosure relates to storage systems and, more specifically, to flow control in an exactly once semantics (EOS) system of a storage system.
Background Information
A storage system typically includes one or more storage devices, such as disks embodied as hard disk drives (HDDs) or solid state drives (SSDs), into which data may be entered, and from which data may be obtained, as desired. The storage system may implement a high-level module, such as a file system, to logically organize the data stored on the disks as storage containers, such as files or logical units (LUNs). Each storage container may be implemented as a set of data structures, such as data blocks that store data for the storage containers and metadata blocks that describe the data of the storage containers. The storage system may also be configured for de-duplication of data to reduce an amount of storage capacity consumed by previously stored data.
It is desirable for a storage system to be idempotent, such that if an operation is performed more than once, the result is the same (e.g., in terms of write and/or read operations). In other words, idempotent operations may be applied multiple times in the storage system without changing the result beyond the initially applied operation. Such idempotent operations may be advantageous because, e.g., if data is written to a disk and the writer (client) is unsure whether the write operation was successful, the operation can be issued again without unintended consequences. In addition, the use of idempotent operations in the storage system helps to prevent data loss by avoiding deletion of data before it is needed, while also ignoring stale copies of the data.
However, certain operations such as, e.g., an operation to increment a reference count for data stored in the storage system, are not idempotent. To ensure that such non-indempotent operations occur exactly once in the storage system, the non-idempotent operations may be recorded (logged) on storage resources) of the storage system until completion of the operations is acknowledged. Such logging of non-idempotent operations increases storage consumption and/or exhaustion, as well as time consumed when replaying the operations during recovery after a crash of the storage system.